// setTimeout(function(){
//     alert(document.getElementById("su").value);
//     document.getElementById("su").onclick = function(){
//         alert("您点击了搜索按钮！");
//     }
// }, 5000)
document.addEventListener("dataEvent", function (event) {
    let message = event.detail;
    if(message.type == 'eval'){
        evalJsExpress(message.data)
    }
    // 在这里可以使用 dataFromContent
    console.log("Data received in injected-script: " , dataFromContent);
});
// alert(0);
console.log('inject entry');
function evalJsExpress(jsExpress){
    var executeScript = 'let crawler_result = function(){'+jsExpress+'}();console.log(crawler_result);window.postMessage({type:\'analyseData\',data:crawler_result}, \'*\')';
    let crawler_result = eval(executeScript);
    debugger;
    //window.postMessage({type:'analyseData',data:crawler_result}, '*');
}
// const constantMock = window.fetch;
// window.fetch = function() {
//     console.log('1111111');
//     alert(1111)
//     return new Promise((resolve, reject) => {
//         debugger;
//         constantMock.apply(this, arguments)
//             .then((response) => {
//                 if (response) {
//                     console.log(dataFromContent);
//                     try{
//                         response.clone().json().then((json) =>{
//                             // debugger;
//                             // abc();
//                             window.postMessage({type:'postData',url:response.url,data:json}, '*');
//                             resolve(response);
//                         }).catch((e)=>{
//                             //console.error(response.url,e)
//                             response.clone().text().then((json) =>{
//                                 // debugger;
//                                 // abc();
//                                 window.postMessage({type:'postData',url:response.url,data:json}, '*');
//                                 resolve(response);
//                             }).catch((e)=>{
//                                 console.error(response.url,e)
//                                 reject(e);
//                             })
//                         })
//
//                     }catch (e) {
//                         console.error(response.url,e)
//                         reject(e);
//                     }
//                     // if(crawler_taskData && crawler_taskData.extractDataUrl){
//                     //     if(response.url.startsWith(crawler_taskData.extractDataUrl)){
//                     // if(response.url.startsWith("https://www.tiktok.com/api/search/item/full/")){
//                     // window.postMessage({'url': response.url, "response": response.clone()}, '*');
//                     // response.clone().json() //the response body is a readablestream, which can only be read once. That's why we make a clone here and work with the clone
//                     //     .then( (json) => {
//                     //         debugger;
//                     //         console.log('get fetch hook response');
//                     //         crawler_executeScriptFun(json,crawler_taskData.analyseDataExpress);
//                     //         crawler_toResult(crawler_result);
//                     //         // console.log(json);
//                     //         //Do whatever you want with the json
//                     //         //resolve(response);
//                     //     })
//                     //     .catch((error) => {
//                     //         console.log(error);
//                     //         //reject(response);
//                     //     })
//                     // }
//
//                     // }
//
//
//                 }else {
//                     console.log(arguments);
//                     console.log('Undefined Response!');
//                     reject();
//                 }
//             }).catch((error) => {
//             console.log(error);
//             reject(error);
//         })
//     })
// }



// myXHRScript.js
// (function(xhr) {
//     alert(2222)
//     debugger
//     var XHR = xhr.prototype;
//     var open = XHR.open;
//     var send = XHR.send;
//
//     // 对open进行patch 获取url和method
//     XHR.open = function(method, url) {
//         this._method = method;
//         this._url = url;
//         return open.apply(this, arguments);
//     };
//     // 同send进行patch 获取responseData.
//     XHR.send = function(postData) {
//        debugger;
//         this.addEventListener('load', function() {
//             var myUrl = this._url ? this._url.toLowerCase() : this._url;
//             if(myUrl) {
//                 if ( this.responseType != 'blob' && this.responseText) {
//                     // responseText is string or null
//                     try {
//                         var arr = this.responseText;
//                         alert(arr)
//                         window.postMessage({type:'postData',url:this._url,data:arr}, '*');
//                         // 因为inject_script不能直接向background传递消息, 所以先传递消息到content_script
//                         // window.postMessage({'url': this._url, "response": arr}, '*');
//                     } catch(err) {
//                         console.log(err);
//                         console.log("Error in responseType try catch");
//                     }
//                 }
//             }
//         });
//         return send.apply(this, arguments);
//     };
// })(XMLHttpRequest);

function addXMLRequestCallback(callback){
    debugger
    var oldSend, i;
    if( XMLHttpRequest.callbacks ) {
        // we've already overridden send() so just add the callback
        XMLHttpRequest.callbacks.push( callback );
    } else {
        // create a callback queue
        XMLHttpRequest.callbacks = [callback];
        // store the native send()
        oldSend = XMLHttpRequest.prototype.send;
        // override the native send()
        XMLHttpRequest.prototype.send = function(){
            // process the callback queue
            // the xhr instance is passed into each callback but seems pretty useless
            // you can't tell what its destination is or call abort() without an error
            // so only really good for logging that a request has happened
            // I could be wrong, I hope so...
            // EDIT: I suppose you could override the onreadystatechange handler though
            for( i = 0; i < XMLHttpRequest.callbacks.length; i++ ) {
                XMLHttpRequest.callbacks[i]( this );
            }
            // call the native send()
            oldSend.apply(this, arguments);
        }
    }
}

// e.g.
addXMLRequestCallback( function( xhr ) {
    debugger
    console.log( xhr.responseText ); // (an empty string)
});
// addXMLRequestCallback( function( xhr ) {
//     console.dir( xhr ); // have a look if there is anything useful here
// });
